#ifndef __TIMESTAMP_H_
#define __TIMESTAMP_H_


// 时间结构体定义
typedef struct {
  uint16_t year;
  uint8_t month;
  uint8_t day;
  uint8_t hour;
  uint8_t minute;
  uint8_t second;
  uint32_t timestamp; // 自基准时间以来的秒数
} DateTimeTypeDef;

//以Unix时间戳基准（1970年1月1日00:00:00）
static DateTimeTypeDef baseDateTime = {
  .year = 1970,    // 正确基准年份
  .month = 1,
  .day = 1,
  .hour = 0,
  .minute = 0,
  .second = 0,
  .timestamp = 0   // 1970年1月1日对应的Unix时间戳为0
};

// 每月天数表 (非闰年)
static const uint8_t daysInMonth[] = {31,28,31,30,31,30,31,31,30,31,30,31};

// 判断闰年
static uint8_t isLeapYear(uint16_t year);

// 获取指定月份的天数
static uint8_t getDaysInMonth(uint16_t year, uint8_t month);
// 从RTC获取当前时间戳 (秒)
uint32_t getCurrentTimestamp(void);
// 将时间戳转换为具体日期时间
void timestampToDateTime(uint32_t timestamp, DateTimeTypeDef *dateTime);
// 初始化基准时间（从RTC读取）
void initBaseDateTime(void);
// 修改：适配简化版RTC结构体的时间设置函数
static HAL_StatusTypeDef setRTCTime(uint16_t year, uint8_t month, uint8_t day, 
                                   uint8_t hour, uint8_t minute, uint8_t second);
// 通过时间戳设置RTC时间
HAL_StatusTypeDef setTimestamp(uint32_t targetTimestamp);
// 使用示例（移除中文，避免编码警告）
void exampleUsage();

#endif

